<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>

// 需求：从下来杂乱的字符串中提取出所有的数字？
var str = 'asdfaj123-ss45a=678sjf9jhgj';

// 方案1：正常编程完成需求
// var tmp = '';
// for (var i = 0; i < str.length; i++) {
//     // 判断每一个字符是否为数字
//     if (str[i] >= 0 && str[i] <= 9) {
//         // 当前的字符是数字
//         tmp += str[i]
//     }
// }
// console.log( tmp );// '123456789'


// 方案2：使用正则完成需求
// var arr = str.match(/\d+/g);
// console.log( arr.join('') );// '123456789'


// JS最初产生的目的是：在客户端验证数据
// 正则表达式
// 正则表达式 也叫 规则表达式
// 正则表达式是一种匹配字符串的规则
// 正则表达式是一种逻辑字符串

/* // 创建正则
// 1.使用构造函数创建正则
// var reg1 = new RegExp(patten,attributes);
// patten 匹配字符串的规则（可以是常量字符串也可以是一个JS变量）
// attributes 属性，值有 g i m 三种，可选参数
// g 代表全局匹配（继续往后匹配）
// i 代表不区分大小写
// m 代表多行匹配
var reg1 = new RegExp('abc','gi');// reg1规则：匹配字符串'abc'，全局匹配，不区分大小写

// 2.普通方式创建正则
var reg2 = /abc/gi;// reg2规则：匹配字符串'abc'，全局匹配，不区分大小写

// reg1.test(str) 使用reg1这个规则去匹配str这个字符串，返回布尔值
var str1 = '123aBc456';
console.log( reg1.test(str1) );// true
console.log( reg2.test(str1) );// true

// 两种创建正则的主要区别：要匹配的字符串，构造函数创建的方式可以是一个变量，普通方式不能是变量
var str = 'age';
var reg3 = new RegExp(str,'i');// 不区分大小写，匹配str变量代表的字符串
var reg4 = /str/i;// 不区分大小写，匹配str这个的字符串
var str2 = '123Age456';
console.log( reg3.test(str2) );// true
console.log( reg4.test(str2) );// false */


// 正则的索引：
var str = '123Abc456abC789ABC';
var reg = /abc/gi;// 匹配'abc'字符串，全局匹配（继续往后匹配）
// 进行匹配之后，正则对象的lastIndex属性记录了上次匹配结束的位置
console.log( reg.test(str) );// 执行一次匹配
console.log( reg.lastIndex );// 6
console.log( reg.test(str) );// 执行一次匹配
console.log( reg.lastIndex );// 12
console.log( reg.test(str) );// 执行一次匹配
console.log( reg.lastIndex );// 18

// reg.lastIndex = 16;// 修改上次匹配结束的位置

console.log( reg.test(str) );// false 执行一次匹配
console.log( reg.lastIndex );// 0 匹配失败之后自动归0



</script>
</body>
</html>